home *** CD-ROM | disk | FTP | other *** search
- /*
- * server.c
- *
- * Server process for time accounting system, non-network version.
- * This should be run as a daemon or in the background.
- */
-
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <stdio.h>
- #include "time_entry.h"
-
- main()
- {
-
- int skt_id, /* Socket descriptor */
- msg_sock, /* Socket that will accept messages */
- i,j;
-
- EVENT_TYPE event; /* An event from one of the client processes */
-
- struct sockaddr sa; /* Socket address structure */
- char buff[80];
- FILE *time_file;
-
- /* Open the output file in append mode */
- if(!(time_file = fopen(TIME_FILE, "a+"))){
- perror("Opening time file");
- exit(1);
- }
-
- fprintf(time_file, "\n***STARTUP***\n");
-
- /*
- * Create a stream type socket in the UNIX domain, with the
- * default protocol.
- */
- skt_id = socket(AF_UNIX, SOCK_STREAM, 0);
- if(skt_id == -1){
- /* Error. Cleanup & leave */
- perror("Can't create socket");
- exit(1);
- }
-
- /*
- * Now that the socket exists, set up the address structure
- * and bind an address to the socket.
- */
- sa.sa_family = AF_UNIX;
- strcpy(sa.sa_data, SOCKET_NAME);
-
- if(bind(skt_id, &sa, sizeof(sa)) == -1){
- perror("Can't bind address");
- exit(1);
- }
-
- listen(skt_id, 5); /* Set up the queue for requests */
-
-
- /*
- * Main loop is here. Accept a connection, read the message,
- * and write the time record...
- */
-
- do{
- /*
- * Accept a connection. Accept will return a new socket
- * descriptor with the same properties as the original. This
- * new socket is used for read and write
- */
-
- msg_sock = accept(skt_id, 0, 0);
- if(msg_sock == -1){
- perror("Can't accept connections");
- exit(1);
- }
- if(read(msg_sock, &event, sizeof(event)) < 0){
- perror("Read");
- exit(1);
- }
- if(event.event_cd != SHUT_DOWN){
- if (fwrite(&event, sizeof(event),1,time_file) != 1){
- perror("Write");
- exit(1);
- }
- }
- close(msg_sock); /* Close the socket retruned by accept... */
- }while(event.event_cd != SHUT_DOWN);
-
- /* Cleanup */
- unlink(SOCKET_NAME);
- fprintf(time_file, "\n***SHUTDOWN***\n");
- fclose(time_file);
- exit(0);
- }
-
-
-
-